package config

import (
	"os"
	"path/filepath"
)

// Config 存储应用程序的配置信息
type Config struct {
	// 服务器配置
	ServerAddr string

	// 目录配置
	BaseDir     string
	ScriptDir   string
	VenvDir     string
	TemplateDir string
	StaticDir   string
}

// NewConfig 创建一个新的配置实例
func NewConfig() *Config {
	// 获取工作目录
	baseDir, err := os.Getwd()
	if err != nil {
		panic(err)
	}

	// 创建配置实例
	cfg := &Config{
		ServerAddr:  ":8080",
		BaseDir:     baseDir,
		ScriptDir:   filepath.Join(baseDir, "data", "scripts"),
		VenvDir:     filepath.Join(baseDir, "data", "venvs"),
		TemplateDir: filepath.Join(baseDir, "templates"),
		StaticDir:   filepath.Join(baseDir, "static"),
	}

	// 确保必要的目录存在
	ensureDir(cfg.ScriptDir)
	ensureDir(cfg.VenvDir)

	return cfg
}

// ensureDir 确保目录存在，如果不存在则创建
func ensureDir(dir string) {
	if err := os.MkdirAll(dir, 0755); err != nil {
		panic(err)
	}
}
